home *** CD-ROM | disk | FTP | other *** search
/ Apple Developer Connection Student Program / ADC Tools Sampler CD Disk 3 1999.iso / Cool Demos, SDKs, & Tools / Demos⁄Tools⁄Offers / Eiffel for CW beta 3 / EiffelS2 / LIBRARY / MOTEL / Controls.c next >
Text File  |  1999-05-18  |  4KB  |  163 lines

  1. /*------------------------------------------------------------------*/
  2. /* Eiffel/S II MacOS Runtime                                         */
  3. /*------------------------------------------------------------------*/
  4. /* Author    : Ian Joyner                                               */
  5. /* Release   : 1.0                                                  */
  6. /* Date      : Dec. 1997                                            */
  7. /* Copyright : Ian Joyner                                            */
  8. /*------------------------------------------------------------------*/
  9. /********************************************************************/
  10. /*                                                                    */
  11. /*                                CONTROLs                            */
  12. /*                                                                    */
  13. /********************************************************************/
  14.  
  15. #include <Controls.h>
  16. #include <Eiffel2.h>
  17. #include "MOTEL.h"
  18. #include <cecil.h>
  19.  
  20. INTEGER platform_control_size ()
  21. {
  22.     ControlRecord p;
  23.     
  24.     return (sizeof (p));
  25. }
  26.  
  27. ControlHandle platform_control_new (WindowPtr w, INTEGER left, INTEGER top, INTEGER right, INTEGER bottom,
  28.                          ConstStr255Param title, Boolean visible,
  29.                          INTEGER value, INTEGER min, INTEGER max,
  30.                          INTEGER proc_id, INTEGER refCon)    
  31. {
  32.     Rect bounds_rect;
  33.     WindowPtr wp;
  34.     Str255 scratch;
  35.     
  36.     SetRect (&bounds_rect, left, top, right, bottom);
  37.     
  38.     strcpy (scratch, title);
  39.     c2pstr ((char *)scratch); /* This might not be right if string is loaded from a resource */
  40.     
  41.     return NewControl (w, &bounds_rect, scratch, visible, value, min, max, proc_id, refCon);
  42. }
  43.  
  44. ControlHandle platform_control_get (INTEGER control_id,  WindowPtr the_window, INTEGER eiffel_object)
  45. {
  46.     ControlHandle new_control = GetNewControl (control_id, the_window);
  47.     SetControlReference (new_control, eiffel_object);
  48.     return new_control;
  49. }
  50.  
  51. POINTER platform_control_get_title (ControlHandle c)
  52. {
  53.     GetControlTitle (c, &scratch_string);
  54.     
  55.     return &scratch_string;
  56. }
  57.  
  58. void platform_control_set_title (ControlHandle c, ConstStr255Param title)
  59. {
  60.     Str255 scratch;
  61.     
  62.     strcpy (scratch, title);
  63.     c2pstr ((char *)scratch); /* This might not be right if string is loaded from a resource */
  64.     SetControlTitle (c, scratch);
  65. }
  66.  
  67. void platform_control_highlight (ControlHandle c, INTEGER state)
  68. {
  69.     HiliteControl (c, state);
  70. }
  71.  
  72. INTEGER platform_control_test (ControlHandle c, INTEGER x, INTEGER y)
  73. {
  74.     Point p;
  75.  
  76.     SetPt (&p, x, y);
  77.     return TestControl (c, p);
  78. }
  79.  
  80. void platform_control_move (ControlHandle c, INTEGER h, INTEGER v)
  81. {
  82.     MoveControl (c, h, v);
  83. }
  84.  
  85. void platform_control_drag (ControlHandle c, INTEGER x, INTEGER y, INTEGER ll, INTEGER lt, INTEGER lr, INTEGER lb,
  86.                             INTEGER sl, INTEGER st, INTEGER sr, INTEGER sb, INTEGER axis)
  87. {
  88.     Point p;
  89.     Rect limit_rect, slop_rect;
  90.  
  91.     SetPt (&p, x, y);
  92.     SetRect (&limit_rect, ll, lt, lr, lb);
  93.     SetRect (&slop_rect, sl, st, sr, sb);
  94.     DragControl (c, p, &limit_rect, &slop_rect, axis);
  95. }
  96.  
  97. void platform_control_resize (ControlHandle c, INTEGER w, INTEGER h)
  98. {
  99.     SizeControl (c, w, h);
  100. }
  101.  
  102. void platform_control_set_value (ControlHandle c, INTEGER new_value)
  103. {
  104.     SetControlValue (c, new_value);
  105. }
  106.  
  107. INTEGER platform_control_get_value (ControlHandle c)
  108. {
  109.     return GetControlValue (c);
  110. }
  111.  
  112. void platform_control_set_minimum (ControlHandle c, INTEGER new_minimum)
  113. {
  114.     SetControlMinimum (c, new_minimum);
  115. }
  116.  
  117. INTEGER platform_control_get_minimum (ControlHandle c)
  118. {
  119.     return GetControlMinimum (c);
  120. }
  121.  
  122. void platform_control_set_maximum (ControlHandle c, INTEGER new_maximum)
  123. {
  124.     SetControlMaximum (c, new_maximum);
  125. }
  126.  
  127. INTEGER platform_control_get_maximum (ControlHandle c)
  128. {
  129.     return GetControlMaximum (c);
  130. }
  131.  
  132. EIF_PROC scroll_handler;
  133.  
  134. static pascal void control_handler (ControlRef c, short part)
  135. {
  136.     if (!scroll_handler)
  137.         scroll_handler = eif_proc ("scroll_handler", eif_type_id ("SCROLL_BAR"));
  138.     
  139.     (eif_proc_call (scroll_handler))(eif_access((*c)->contrlRfCon), part);
  140. }
  141.  
  142. #if GENERATINGCFM
  143.     static RoutineDescriptor chRD = BUILD_ROUTINE_DESCRIPTOR(uppControlActionProcInfo, control_handler);
  144.     static ControlActionUPP pch = &chRD;
  145. #else
  146.     static ControlActionUPP pch = control_handler;
  147. #endif
  148.  
  149. INTEGER platform_control_track (ControlHandle c, INTEGER x, INTEGER y, POINTER routine)
  150. {
  151.     Point p;
  152.     
  153.     SetPt (&p, x, y);
  154.  
  155.     if (routine == NULL)
  156.     {
  157.         return TrackControl (c, p, NULL);
  158.     }
  159.     else
  160.     {
  161.         return TrackControl (c, p, pch);
  162.     }
  163. }